#include "dir.h"

using namespace boost::filesystem;

Dir::Dir()
{
}

bool Dir::exists(const Path& directory) const
{
// #if defined(WIN32)
	const path directoryPath(directory);
	return boost::filesystem::exists(directoryPath) && is_directory(directoryPath);
// #elif defined(UNIX)
//         DIR *pdir;
//         pdir = opendir(directory.c_str());
//         if (pdir)
//         {
//                 closedir(pdir);
//                 return true;
//         }
//         else
//                 return false;
// #endif
}

void Dir::make(const Path& directory) const
{
// #if defined(WIN32)
	const path directoryPath(directory);
	create_directory(directoryPath);        
// #elif defined(UNIX)
// 	mkdir( directory.c_str(), 0755 );
// #endif    
}

void Dir::listContents(const Path& dir, Paths& files, const bool fullPath) const
{
// #if defined(WIN32)
	if(exists(dir))
	{
		const Path directoryPath(dir);
		const directory_iterator end;	//default constructor constructs end iterator
		for( directory_iterator iter(directoryPath) ; iter != end ; ++iter )
		{
			if(is_regular_file(*iter))
			{
				if(fullPath)
				{
					Path finalPath(dir);
					finalPath += "/";
					finalPath += iter->leaf();
					files.push_back(finalPath);
				}
				else
				{
					files.push_back(iter->leaf());
				}
			}
		}
	}
// #elif defined(UNIX)
//         DIR *dp;
//         struct dirent *dirp;
//         if((dp  = opendir(dir.c_str())) != NULL)
//         {
//                 while ((dirp = readdir(dp)) != NULL)
//                 {
//                         if ( Path(dirp->d_name) != "." && Path(dirp->d_name) != ".." )
//                         {
//                                 files.push_back(Path(dirp->d_name));
//                         }
//                 }
//                 closedir(dp);
//         }
// #endif
}

void Dir::listContentsFull(const Path& dir, Paths& files) const
{
// #if defined(WIN32)
	listContents(dir, files, true);
// #elif defined(UNIX)
//         DIR *dp;
//         struct dirent *dirp;
//         if((dp  = opendir(dir.c_str())) != NULL)
//         {
//                 while ((dirp = readdir(dp)) != NULL)
//                 {
//                         if ( Path(dirp->d_name) != "." && Path(dirp->d_name) != ".." )
//                         {
//                                 Path fulldir = dir;
//                                 fulldir.append("/");
//                                 fulldir.append(dirp->d_name);
//                                 files.push_back(fulldir);
//                         }
//                 }
//                 closedir(dp);
//         }
// #endif
}


Dir::~Dir()
{
}